package com.engine.salary.mapper.siarchives;

import com.engine.salary.entity.siarchives.po.InsuranceArchivesEmployeePO;
import com.engine.salary.entity.siarchives.po.InsuranceArchivesFundSchemePO;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;

/**
 * @Author weaver_cl
 * 
 * @Date 2022/3/15
 * @Version V1.0
 **/
public interface FundSchemeMapper {

    /**
     * 根据员工id获取
     * @param employeeId
     * @return
     */
    List<InsuranceArchivesFundSchemePO> getFundByEmployeeId(@Param("employeeIds")List<Long> employeeId);

    /**
     * 根据人员id和个税扣缴人id获取记录
     * @param insuranceArchivesEmployeePO
     * @return
     */
    List<InsuranceArchivesFundSchemePO> getFundByEmployeeIdAndPayOrg(@Param("param") InsuranceArchivesEmployeePO insuranceArchivesEmployeePO);


    /**
     * 根据ids获取多条
     * @param ids
     * @return
     */
    List<InsuranceArchivesFundSchemePO> getFundById(@Param("ids")List<Long> ids);

    /**
     * 根据id获取单条
     * @param id
     * @return
     */
    InsuranceArchivesFundSchemePO getOneById(@Param("id")Long id);

    /**
     * 批量删除
     * @param singletonList
     */
    void batchDeleteByEmployeeIds(@Param("employeeIds") Collection<Long> singletonList);

    /**
     * 根据人员id和个税扣缴义务人删除档案
     * @param insuranceArchivesFundSchemePO
     */
    void deleteByEmployeeIdAndPayOrg(@Param("param") InsuranceArchivesFundSchemePO insuranceArchivesFundSchemePO);
    /**
     * 批量保存
     * @param singletonList
     */
    void batchSave(@Param("fundSchemePOS") List<InsuranceArchivesFundSchemePO> singletonList);

    /**
     * 根据个税扣缴义务人id获取目标账单月可以进行缴纳的人员id
     * 筛选条件为账单月是否在起始缴纳月和最后缴纳月之间
     * @param paymentOrganization
     * @return
     */
    List<Long> listCanPayEmpIds(@Param("paymentOrganization")Long paymentOrganization, @Param("billMonth")String billMonth, @Param("nonPayment") Integer nonPayment);

    List<InsuranceArchivesFundSchemePO> listAll();

    int batchUpdate(@Param("collection") List<InsuranceArchivesFundSchemePO> pos);

    /**
     * 批量更新最后缴纳月
     * @param ids
     * @param endTime
     */
    void batchUpdateEndTime(@Param("ids")List<Long> ids, @Param("endTime")String endTime);

    int updateById(InsuranceArchivesFundSchemePO insuranceArchivesFundSchemePO);

    /**
     * 批量更新最后缴纳月为null
     * @param ids
     */
    void batchUpdateEndTimeToNull(@Param("ids")List<Long> ids);

    /**
     * 根据id删除
     * @param fundArchiveDelIds
     */
    void deleteByIds(@Param("ids")List<Long> fundArchiveDelIds);

    /**
     * 新增
     * @param insuranceArchivesFundSchemePO
     */
    void insert(InsuranceArchivesFundSchemePO insuranceArchivesFundSchemePO);

    /**
     * 更新最后缴纳月
     * @param id
     * @param endTime
     */
    void updateEndTime(@Param("id")Long id, @Param("endTime")String endTime);

    List<InsuranceArchivesFundSchemePO> listBySchemeId(@Param("fundSchemeId")Long id, @Param("runStatuses")List<String> runStatus);
}
